import unittest
import requests

from api.openAccountApi import OpenAccountApi
from api.regLoginApi import RegLoginApi
from common import utils


class TestOpenAccount(unittest.TestCase):

    def setUp(self) -> None:
        # 创建session对象
        self.session = requests.session()
        # 实例化封装接口请求的类
        self.reg_login_api = RegLoginApi(self.session)
        self.open_account_api = OpenAccountApi(self.session)

    def tearDown(self) -> None:
        # 关闭session对象
        self.session.close()

    # 实名认证测试用例
    def test01_realname(self):
        # 实现登录接口
        self.reg_login_api.user_login("15814662511", "123321")
        # 实现实名认证接口
        res = self.open_account_api.realname("张三", "632323190605260500")

        # 断言
        # 通用信息断言
        utils.common_assert(self, res, 200, 200, "提交成功")
        # 实名认证信息校验
        self.assertEqual("632****500", res.json().get("data").get("card_id"))
        self.assertEqual("张**", res.json().get("data").get("realname"))

    # 开户测试用例
    def test02_open_account(self):
        # 登录成功，并且登录的账号完成实名认证
        self.reg_login_api.user_login("15814662511", "123321")
        # 完成开户接口，获取response对象
        res = self.open_account_api.open_account()

        # 断言
        utils.common_assert(self, res, 200, 200, "form")

    # 第三方开户测试用例
    def test04_third_open_account(self):
        # 登录成功，并且登录的账号完成实名认证
        self.reg_login_api.user_login("15814662511", "123321")
        # 完成开户接口，获取response对象
        res_open_account = self.open_account_api.open_account()

        # 调用封装获取第三方接口请求数据的方法，获取第三方开户接口的url
        url = utils.html_util(res_open_account)[0]

        # 调用封装获取第三方接口请求数据的方法，获取第三方开户接口的请求体数据
        form_dict = utils.html_util(res_open_account)[1]

        # 调用封装的第三方开户接口的方法，获取第三方开户接口返回的响应结果
        res_3_open_account = self.open_account_api.third_open_account(url, form_dict)

        # 断言
        # 断言状态码
        self.assertEqual(200, res_3_open_account.status_code)
        # 断言响应体数据
        self.assertIn("OK", res_3_open_account.text)
